﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ESAN.Componentes.DACoreESAN.Models;
using System.Data.Common;
using System.Data;
using ESAN.Componentes.DACoreESAN.Logic.Facade;

namespace ESAN.Componentes.BLCoreESAN.Logic.Facade
{
    public class BLPostulante
    {
        /// <summary>
        /// Se registra la postulación
        /// </summary>
        /// <param name="postulacion">Objeto del tipo Posutlante</param>
        /// <param name="cliente">Objeto del tipo Cliente</param>
        /// <returns>Valor indicando si fue exitosa la transacción</returns>
        static public bool RegistrarPostulacion(int idConvocatoria, IN_CLIENTE cliente)
        {
            return DAPostulante.RegistrarPostulacion(idConvocatoria, cliente);
        }

        static public bool RegistrarCodigoHonor(int idPostulante, bool EsActivo)
        {
            return DAPostulante.RegistrarCodigoHonor(idPostulante, EsActivo);
        }

        public static bool ObtenerCodigoHonor(int idPostulante)
        {
            return DAPostulante.ObtenerCodigoHonor(idPostulante);
        }

        public static List<IN_CONSULTA_ASPIRANTE> ConsultarAspirante(int idConvocatoria, string estado)
        {
            return DAPostulante.ConsultarAspirante(idConvocatoria, estado);
        }

        public static bool PosponerPostulacion(int idPostulante, int idConvocatoria, string motivo)
        {
            return DAPostulante.PosponerPostulacion(idPostulante, idConvocatoria, motivo);
        }

        public static bool RechazarPostulacion(int idPostulante, string motivo)
        {
            return DAPostulante.RechazarPostulacion(idPostulante, motivo);
        }

        public static bool EliminarPostulacion(int idPostulante, string motivo, string estado)
        {
            return DAPostulante.EliminarPostulacion(idPostulante, motivo,estado);
        }

        public static List<IN_CONSULTA_ASPIRANTEENTREVISTAPERSONAL> ConsultarAspiranteEntrevistaPersonal(int idConvocatoria)
        {
            return DAPostulante.ConsultarAspiranteEntrevistaPersonal(idConvocatoria);
        }

        public static bool ProgramarEntrevistaPersonal(int idProgramacionProfesor, DateTime? fecha,
                                                      string[] arraIdsPost, int tiempo)
        {

            //Se debe recorrer las horas pendientes por entrevistar del profesor
            IN_PROGRAMACION_PROFESOR profesorProg = DAPostulante.ObtenerProgramacionProfesor(idProgramacionProfesor);

            DateTime? horaIni;
            DateTime? horaFin;

            IN_PROGRAMACION_PROFESOR_SESION programacionAspirante;

            for (int i = 1; i <= arraIdsPost.Count() - 1; i++)
            {
                horaIni = profesorProg.HoraInicio;
                horaFin = profesorProg.HoraFin;
                while (horaIni < horaFin)
                {
                    //Se debe validar si en la hora ini que vamos a asignar al alumno se encuentra disponible
                    if (DAPostulante.ObtenerProgramacionProfesorSesion(idProgramacionProfesor, horaIni) == null)
                    {
                        programacionAspirante = new IN_PROGRAMACION_PROFESOR_SESION();
                        programacionAspirante.Post_ID = int.Parse(arraIdsPost[i].ToString());
                        programacionAspirante.IdProgramacionProfesor = idProgramacionProfesor;
                        programacionAspirante.Fecha = DateTime.Now;
                        programacionAspirante.HoraInicio = (DateTime)horaIni.Value;
                        programacionAspirante.HoraFin = (DateTime)horaIni.Value.AddMinutes(tiempo);

                        bool dAPostulanteProgramarEntrevistaPersonal = DAPostulante.ProgramarEntrevistaPersonal(programacionAspirante);
                        if (true)
                        {
                            //Debe salir del While
                            break;
                        }
                    }
                    else
                    {
                        horaIni = horaIni.Value.AddMinutes(tiempo);
                    }
                }
            }

            

            return true;

        }


        public static bool EliminarProgramacionProfesorSesion(int ID)
        {
            return DAPostulante.EliminarProgramacionProfesorSesion(ID);
        }

        public static bool AprobarPostulante(int idPostulante, string nuevoEstado)
        {
            return DAPostulante.AprobarPostulante(idPostulante, nuevoEstado);
        }


        public static List<IN_PROGRAMACION_PROFESOR> ListadoProgramacionProfesor(int idConvocatoria)
        {
            return DAPostulante.ListadoProgramacionProfesor(idConvocatoria);
        }

        public static bool RegistrarEntrevistaPersonal(int idPostulante, decimal puntaje, string comentario)
        {
            return DAPostulante.RegistrarEntrevistaPersonal(idPostulante, puntaje, comentario);
        }

        public static List<IN_CONSULTAASPIRANTENOTAADMISION> ConsultarAspiranteNotaAdmision(int idConvocatoria)
        {
            return DAPostulante.ConsultarAspiranteNotaAdmision(idConvocatoria);
        }

        public static bool RegistrarDescuento(int idPostulante, int idTipoDcto, string motivo)
        {
            return DAPostulante.RegistrarDescuento(idPostulante, idTipoDcto, motivo);
        }

    }
}
